﻿/*
 * This file is part of quickReminder, a software for gamers
 *
 * Copyright (C) 2006-2009 Lucas Romero
 *
 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
using System;

namespace LucasCode.PublicTypes
{
    [Serializable]
    public class MatchAction
    {
        #region Private Properties
        private MatchActions m_Action;
        private MatchPlayer m_Subject = null;
        private MatchPlayer m_Object = null;
        private int m_SubjectID = 0;
        private int m_ObjectID = 0;
        private MatchActionFlags m_Flags;
        private object m_ExtraData;
        #endregion

        #region Constructors

        private MatchAction()
        {

        }

        private MatchAction(MatchActions action)
        {
            m_Action = action;
        }

        public MatchAction(MatchActions action, int subjectID, int objectID)
        {
            m_Action = action;
            m_SubjectID = subjectID;
            m_ObjectID = objectID;
        }

        public MatchAction(MatchActions action, int subjectID, int objectID, MatchWeapons weapon, bool Headshot)
            : this(action, subjectID, objectID)
        {
            if (Headshot)
                m_Flags |= MatchActionFlags.Headshot;
            Weapon = weapon;
        }
        #endregion

        #region Properties
        public MatchActions Action
        {
            get { return m_Action; }
            set { m_Action = value; }
        }

        public int ObjectID
        {
            get { return m_ObjectID; }
            set { m_ObjectID = value; }
        }

        public int SubjectID
        {
            get { return m_SubjectID; }
            set { m_SubjectID = value; }
        }

        public MatchActionFlags Flags
        {
            get { return m_Flags; }
            set { m_Flags = value; }
        }

        public MatchWeapons Weapon
        {
            get { return (MatchWeapons)m_ExtraData; }
            set { m_ExtraData = value; }
        }

        //[XmlIgnore]
        //public MatchPlayer Object
        //{
        //    get { return m_Object; }
        //    set { m_Object = value; }
        //}

        //[XmlIgnore]
        //public MatchPlayer Subject
        //{
        //    get { return m_Subject; }
        //    set { m_Subject = value; }
        //}
        #endregion
    }
}
